//
//  NSString+YHMD5.m
//  UI24_加密
//
//  Created by dllo on 16/8/16.
//  Copyright © 2016年 yh. All rights reserved.
//

#import "NSString+YHMD5.h"
#import <CommonCrypto/CommonCrypto.h>

@implementation NSString (YHMD5)

// 机密性 完整性 不可否认 认证
// 单向散列函数(是一种算法)
- (NSString *)stringWith32BitMD5 {
    // 1. 加密的库是C语言的库 所以要将字符串转化成C语言的
    const char *cString = [self UTF8String];
    CC_LONG length = (CC_LONG)strlen(cString);
    unsigned char bytes[CC_MD5_DIGEST_LENGTH];
    // 2. 将C语言的字串转化成MD5
    CC_MD5(cString, length, bytes);
    // 将C语言字符串 转化成OC字符串
    NSMutableString *finalMD5String = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        // 02x 两位 不足 用0补齐
        [finalMD5String appendFormat:@"%02x", bytes[i]];    }

    return finalMD5String;
}

// 字符串转化32位 MD5字符串 小写
- (NSString *)stringWith32BitMD5Lower {
    return [[self stringWith32BitMD5] lowercaseString];
}
// 字符串转化32位 MD5字符串 大写
- (NSString *)stringWith32BitMD5Upper {
    return [[self stringWith32BitMD5] uppercaseString];
}
// 去除32位的前8位和后8位
- (NSString *)stringWith16BitMD5 {
    NSString *str1 = [[self stringWith32BitMD5] substringToIndex:[[self stringWith32BitMD5] length] - 8];
    NSString *str2 = [str1 substringFromIndex:8];
    return str2;
}

- (NSString *)stringWith16BitMD5Upper {
    return [[self stringWith16BitMD5] uppercaseString];
}

- (NSString *)stringWith16BitMD5Lower {
    return [[self stringWith16BitMD5] lowercaseString];
}



@end
